package org.study.redisson.boot.config;

import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.study.redisson.boot.util.RedissonLockUtils;

/**
 * 通过程序化方法配置 Redisson
 *
 * @author Administrator
 * @date 2021-06-02
 */
//@Configuration
public class RedissonJavaConfig {
    @Bean
    public RedissonClient redissonClient() {
        Config config = new Config();
        //config.setTransportMode(TransportMode.EPOLL);

        // 单机模式
        config.useSingleServer()
                //可以用"rediss://"来启用SSL连接
                .setAddress("redis://127.0.0.1:6379")
                .setPassword("redis")
                .setDatabase(0)
                //主连接池大小
                .setConnectionPoolSize(5)
                //最小空闲连接数
                .setConnectionMinimumIdleSize(2);

        // 主从模式
        /*config.useMasterSlaveServers()
                //可以用"rediss://"来启用SSL连接
                .setMasterAddress("redis://127.0.0.1:6379")
                .addSlaveAddress("redis://127.0.0.1:6389", "redis://127.0.0.1:6332", "redis://127.0.0.1:6419")
                .addSlaveAddress("redis://127.0.0.1:6399")
                .setDatabase(0)
                .setPassword("redis")
                //主节点连接池大小
                .setMasterConnectionPoolSize(5)
                //主节点最小空闲连接数
                .setMasterConnectionMinimumIdleSize(2)
                //从节点连接池大小
                .setSlaveConnectionPoolSize(5)
                //从节点最小空闲连接数
                .setSlaveConnectionMinimumIdleSize(2);*/


        // 哨兵模式
        /*config.useSentinelServers()
                .setMasterName("mymaster")
                //可以用"rediss://"来启用SSL连接
                .addSentinelAddress("127.0.0.1:26389", "127.0.0.1:26379")
                .addSentinelAddress("127.0.0.1:26319");*/

        // 集群模式
        /*config.useClusterServers()
                // 集群状态扫描间隔时间，单位是毫秒
                .setScanInterval(2000)
                //可以用"rediss://"来启用SSL连接
                .addNodeAddress("redis://127.0.0.1:7000", "redis://127.0.0.1:7001")
                .addNodeAddress("redis://127.0.0.1:7002");*/

        // 云托管模式
        /*config.useReplicatedServers()
                // 主节点变化扫描间隔时间
                .setScanInterval(2000)
                //可以用"rediss://"来启用SSL连接
                .addNodeAddress("redis://127.0.0.1:7000", "redis://127.0.0.1:7001")
                .addNodeAddress("redis://127.0.0.1:7002");*/

        RedissonClient redissonClient = Redisson.create(config);
        // 给工具类注入它需要的Bean
        RedissonLockUtils.setRedissonClient(redissonClient);
        return redissonClient;
    }
}
